﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace Valkyr_Name_Generator
{
    public partial class Form1 : Form
    {
        private string GenerarNombre(string idiomanombre, char sexo, string idiomaape1, string idiomaape2, string idiomaApodo)
        {
            valkyrdbaccess inser = new valkyrdbaccess();
            inser.crearPred("nombres", "DarkCrow", "elener");
            inser.conectar();
            List<string> campos = new List<string>();
            campos.Add("Nombre");
            string resul="";
            string aux = resul;
            string query = "SELECT nombre FROM nombres WHERE ((idioma=\"" + idiomanombre + "\") AND (sexo='" + sexo + "'))GROUP BY RAND() LIMIT 1";
            inser.queryacapon(query, campos);
            List<List<string>> salida;
            salida = inser.ejecutarSelect();
            aux = salida[0][0];
            resul = aux;
            if (idiomaApodo != "")
            {
                campos.Clear();
                if (sexo == 'H')
                {
                    campos.Add("Femenino");
                    query = "SELECT Femenino FROM adjetivos WHERE (idioma=\"" + idiomaApodo + "\") GROUP BY RAND() LIMIT 1";
                }
                else
                {
                    campos.Add("Adjetivo");
                    query = "SELECT Adjetivo FROM adjetivos WHERE (idioma=\"" + idiomaApodo + "\") GROUP BY RAND() LIMIT 1";
                }
                inser.queryacapon(query, campos);
                salida = inser.ejecutarSelect(); ;
                aux = salida[0][0];
                resul = resul + " \"" + aux + "\"";
            }
            if (idiomaape1 != "")
            {
                campos.Clear();
                campos.Add("Apellido");
                query = "SELECT Apellido FROM apellidos WHERE (idioma=\"" + idiomaape1 + "\") GROUP BY RAND() LIMIT 1";
                inser.queryacapon(query, campos);
                salida = inser.ejecutarSelect(); ;
                aux = salida[0][0];
                resul = resul +" "+ aux;
                if (idiomaape2 != "")
                {
                    query = "SELECT Apellido FROM apellidos WHERE (idioma=\"" + idiomaape2 + "\") GROUP BY RAND() LIMIT 1";
                    inser.queryacapon(query, campos);
                    salida = inser.ejecutarSelect(); ;
                    aux = salida[0][0];
                    resul = resul + " " + aux;
                }
            }
            inser.cerrar();
            return resul;
        }

        public void LlenarComboboxes()
        {
            cbIdiomaNombre.Items.Clear();
            cbIdiomaApe1.Items.Clear();
            cbIdiomaApe2.Items.Clear();
            cbIdiomaApodo.Items.Clear();
            valkyrdbaccess inser = new valkyrdbaccess();
            inser.crearPred("nombres", "DarkCrow", "elener");
            inser.conectar();
            List<string> campos = new List<string>();
            campos.Add("Nombre");
            string query = "SELECT DISTINCT idioma.Nombre FROM idioma, nombres WHERE (idioma.Nombre=nombres.Idioma)";
            inser.queryacapon(query, campos);
            List<List<string>> salida;
            salida = inser.ejecutarSelect();
            for (int i = 0; i < salida.Count; i++)
            {
                cbIdiomaNombre.Items.Add(salida[i][0]);
            }
            query = "SELECT DISTINCT idioma.Nombre FROM idioma, apellidos WHERE (idioma.Nombre=apellidos.Idioma)";
            inser.queryacapon(query, campos);
            salida = inser.ejecutarSelect();
            for (int i = 0; i < salida.Count; i++)
            {
                cbIdiomaApe1.Items.Add(salida[i][0]);
                cbIdiomaApe2.Items.Add(salida[i][0]);
            }
            query = "SELECT DISTINCT idioma.Nombre FROM idioma, adjetivos WHERE (idioma.Nombre=adjetivos.Idioma)";
            inser.queryacapon(query, campos);
            salida = inser.ejecutarSelect();
            for (int i = 0; i < salida.Count; i++)
            {
                cbIdiomaApodo.Items.Add(salida[i][0]);
            }


        }

        public Form1()
        {
            InitializeComponent();
            LlenarComboboxes();
            
        }

        private void nuevoIdiomaToolStripMenuItem_Click(object sender, EventArgs e)
        {
            NuevoIdioma nuevo = new NuevoIdioma();
            nuevo.ShowDialog();
            LlenarComboboxes();

             
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            // TODO: esta línea de código carga datos en la tabla 'nombresDataSet1.idioma' Puede moverla o quitarla según sea necesario.
            this.idiomaTableAdapter.Fill(this.nombresDataSet1.idioma);

        }

        private void agregarPalabrasToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Nueva_Palabra nuevo = new Nueva_Palabra();
            nuevo.ShowDialog();
            LlenarComboboxes();
        }

        private void cbApe1_CheckedChanged(object sender, EventArgs e)
        {
            if (cbApe1.Checked)
            {
                cbApe2.Enabled = true;
                gbApe1.Enabled = true;
            }
            else
            {
                cbApe2.Checked = false;
                cbApe2.Enabled = false;
                gbApe1.Enabled = false;
            }
        }

        private void cbApe2_CheckedChanged(object sender, EventArgs e)
        {
            if (cbApe2.Checked)
            {
                gbApe2.Enabled = true;
            }
            else
            {
                gbApe2.Enabled = false;
            }
        }

        private void btnGenerar_Click(object sender, EventArgs e)
        {
            char sexo;
            string ape1,ape2="",apodo="";
            if (rbHembra.Checked)
                sexo='H';
            else
                sexo='M';
            if (cbApe1.Checked)
            {
                ape1=cbIdiomaApe1.Text;
                if (cbApe2.Checked)
                    ape2=cbIdiomaApe2.Text;
                else
                    ape2="";
            }
            else
                ape1="";
            if (cbApodo.Checked)
                apodo = cbIdiomaApodo.Text;

            lblresul.Text = "Resultado: " + GenerarNombre(cbIdiomaNombre.Text, sexo, ape1, ape2, apodo);
        }

        private void gbApe1_Enter(object sender, EventArgs e)
        {

        }

        private void gbApe2_Enter(object sender, EventArgs e)
        {

        }

        private void cbApodo_CheckedChanged(object sender, EventArgs e)
        {
            if (cbApodo.Checked)
                gbApodo.Enabled = true;
            else
                gbApodo.Enabled = false;
        }

        private void gbApodo_Enter(object sender, EventArgs e)
        {

        }

    }
}
